# ๊ฒฝ์ ์ํ(Race Condition)
๊ณต์ ์์์ ๋ํด ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํ ๋, ๊ฒฐ๊ณผ๊ฐ์ ์ํฅ์ ์ค ์ ์๋ ์ํ
๋์ ์ ๊ทผ ์ ์๋ฃ์ ์ผ๊ด์ฑ์ ํด์น๋ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋จ
# Race Condition์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ
# ์ปค๋ ์์ ์ ์ํํ๋ ์ค์ ์ธํฐ๋ฝํธ ๋ฐ์
- ๋ฌธ์ ์ : ์ปค๋๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ์ฌ ์์ ์ ์ํํ๋ค๊ฐ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๊ฒฝ์ฐ
- ํด๊ฒฐ๋ฒ : ์ปค๋๋ชจ๋์์ ์์
์ ์ํํ๋ ๋์, ์ธํฐ๋ฝํธ๋ฅผ disable ์์ผ CPU ์ ์ด๊ถ์ ๊ฐ์ ธ๊ฐ์ง ๋ชปํ๋๋ก ํ๋ค.
# ํ๋ก์ธ์ค๊ฐ 'System Call'์ ํ์ฌ ์ปค๋ ๋ชจ๋๋ก ์ง์ ํ์ฌ ์์ ์ ์ํํ๋ ๋์ค ๋ฌธ๋งฅ ๊ตํ์ด ๋ฐ์ํ ๋
- ๋ฌธ์ ์ : ํ๋ก์ธ์ค1์ด ์ปค๋๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋์ค, ์๊ฐ์ด ์ด๊ณผ๋์ด CPU ์ ์ด๊ถ์ด ํ๋ก์ธ์ค2๋ก ๋์ด๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๊ฒฝ์ฐ ( ํ๋ก์ธ์ค2๊ฐ ์์ ์ ๋ฐ์๋์ง ์์ )
- ํด๊ฒฐ๋ฒ : ํ๋ก์ธ์ค๊ฐ ์ปค๋๋ชจ๋์์ ์์
์ ํ๋ ๊ฒฝ์ฐ ์๊ฐ์ด ์ด๊ณผ๋์ด๋ CPU ์ ์ด๊ถ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ๋์ด๊ฐ์ง ์๋๋ก ํจ
# ๋ฉํฐ ํ๋ก์ธ์ ํ๊ฒฝ์์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์ปค๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋
- ๋ฌธ์ ์ : ๋ฉํฐ ํ๋ก์ธ์ ํ๊ฒฝ์์ 2๊ฐ์ CPU๊ฐ ๋์์ ์ปค๋ ๋ด๋ถ์ ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ฌ ์กฐ์ํ๋ ๊ฒฝ์ฐ
- ํด๊ฒฐ๋ฒ : ์ปค๋ ๋ด๋ถ์ ์๋ ๊ฐ ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋๋ง๋ค, ๊ทธ ๋ฐ์ดํฐ์ ๋ํ lock/unlock์ ํ๋ ๋ฐฉ๋ฒ